package bombita.modelo.Municiones;

import org.jdom2.Element;

import bombita.modelo.Direccion;
import bombita.modelo.Interactuador;
import bombita.modelo.Interfaces.*;
import bombita.modelo.Movimientos.Movimiento;

/*Tiene un movimiento Volador(se mueve como si no hubiera objetos tapando su paso).
  Tiene un rango con la cantidad de posiciones que se moverá.*/
public abstract class Proyectil extends Municion implements Movil
{
	protected int rango;
	protected Movimiento elMovimiento;
	protected Direccion direccion;

	public void mover(Direccion direccion){
		this.elMovimiento.mover(direccion, this);
		this.rango -= 1;
		if (rango == 0) { 
			miPosicion.agregar(this.crearBomba());
			this.destruir();
		}
	}

	protected abstract Bomba crearBomba();

	public float delay ()
	{
		return 0.5f;
	}
	
	public void interactuarCon(Interactuador unaCosa) {
		unaCosa.interactuarConProyectil(this);
	}

	@Override
	public void recibirPulsoReloj(float tiempo)
	{
		this.elMovimiento.recibirPulsoReloj(tiempo);
		this.mover(direccion);
	}
	
	public Direccion getDireccion()
	{
		return this.direccion;
	}
	
	@Override
	public Element serializar()
	{
		Element nodo = super.serializar();
		nodo.setAttribute("rango", Integer.toString(rango));
		nodo.setAttribute("direccion", direccion.toString());
		return nodo;
	}
	
	@Override
	public void aplicarSerializado(Element nodo) throws Exception {
		super.aplicarSerializado(nodo);
		rango = nodo.getAttribute("rango").getIntValue();
		direccion = Direccion.fromString(nodo.getAttributeValue("direccion"));
	}
}
